/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package desarrollosoft.ghce.entidades;

import java.util.ArrayList;
import java.util.List;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

/**
 *
 * @author ariel
 */
@Entity
@DiscriminatorValue("ESTUDIOS_LABORATORIO")
public class EstudioLaboratorio extends Estudio {
    
    @ManyToOne
    @JoinColumn(name = "plantillaEstudio_id", nullable = false)
    private PlantillaEstudioLaboratorio plantillaEstudioLaboratorio;

    @LazyCollection(LazyCollectionOption.FALSE)
    @OneToMany(mappedBy = "estudioLaboratorio")
    private List<ResultadoComponente> listaResultadoComponente;

    public EstudioLaboratorio() {
        super();
    }
    
    public PlantillaEstudioLaboratorio getPlantillaEstudio() {
        return plantillaEstudioLaboratorio;
    }

    public void setPlantillaEstudio(PlantillaEstudioLaboratorio plantillaEstudioLaboratorio) {
        this.plantillaEstudioLaboratorio = plantillaEstudioLaboratorio;
    }

    public List<ResultadoComponente> getListaResultadoComponente() {
        return listaResultadoComponente;
    }

    public void setListaResultadoComponente(List<ResultadoComponente> listaResultadoComponente) {
        this.listaResultadoComponente = listaResultadoComponente;
    }

    @Override
    public String getTipificacion() {
        return "Estudio Laboratorio";
    }

    @Override
    public String getDescripcion() {
        if (plantillaEstudioLaboratorio != null) {
            return plantillaEstudioLaboratorio.getNombre();
        }
        return ""; // ??
    }

    public EstudioLaboratorio clonar() {
        EstudioLaboratorio estudioLaboratorio = new EstudioLaboratorio();
        
        estudioLaboratorio.setId(getId());
        estudioLaboratorio.setFecha(getFecha());
        estudioLaboratorio.setFechaFin(getFechaFin());
        estudioLaboratorio.setGravedad(getGravedad());
        
        if (listaResultadoComponente == null) {
            estudioLaboratorio.setListaResultadoComponente(listaResultadoComponente);
        } else { // PARA QUE NO TENGA REFERENCIA A LA MISMA LISTA
            List<ResultadoComponente> listaNueva = new ArrayList<>();
            for (ResultadoComponente resultadoComponente : listaResultadoComponente) {
                listaNueva.add(resultadoComponente);
            }
            estudioLaboratorio.setListaResultadoComponente(listaNueva);
        }

        estudioLaboratorio.setPaciente(getPaciente());
        estudioLaboratorio.setPlantilla(getPlantilla());
        estudioLaboratorio.setPlantillaEstudio(plantillaEstudioLaboratorio);
        estudioLaboratorio.setProfesional(getProfesional());
        estudioLaboratorio.setProfesionalQueLoCompleto(getProfesionalQueLoCompleto());
        
        return estudioLaboratorio;
    }
}
